package ve.gob.cne.action.login;

import java.util.Map;
import java.util.Set;

import org.apache.log4j.Logger;

import ve.gob.cne.action.common.SaceCommonAction;
import ve.gob.cne.to.UsuarioTo;
import ve.gob.cne.util.SHA1;




public class LoginAction extends SaceCommonAction{
	
	/**
	 * 
	 */

	private static final long serialVersionUID = 1L;
	private final static Logger logger = Logger.getLogger(LoginAction.class);
	private int cedula;
	private String clave;
	private String mensaje;
	private String nombres;
	private String apellidos;
	private UsuarioTo usuario;
	protected Map session;
	
	@SuppressWarnings("unchecked")
	public String init() {
		
        return SUCCESS;
    }
	
	@SuppressWarnings("unchecked")
	public String login(){
		String result = ERROR;
		SHA1 sha = new SHA1();
		
		
		try {
			clearErrorsAndMessages();
			this.getSession().put("control", 0);
			if(this.getCedula() != 0 && this.getClave() != null && !this.getClave().isEmpty()){	
				usuario = this.getServicioUsuario().getUsuario(this.getCedula());
				if (usuario != null) {
	                if (usuario.getCedula() == this.getCedula() && usuario.getPassword().equalsIgnoreCase(sha.getHash(this.getClave()))) {
	                	this.getSession().put("usuario", usuario);
	                	this.getSession().put("control", 1);
	                	logger.info("Ingreso de usuario: " + this.usuario.getCedula() + " " + this.usuario.getNombres() + " " + this.usuario.getApellidos());
	                	result = SUCCESS;
	                }else{
	                	addActionError("Usuario o clave Inavalida");
	                	logger.warn("Usuario o clave Inavalida");
	                }
	             }else{
	            	 addActionError("No existe ningun usuario registrado con la cedula " + this.getCedula());
	            	 logger.warn("No existe ningun usuario registrado con la cedula " + this.getCedula());
	             }
				}else{
					addActionError("Debe proporcionar Usuario y clave");
				}
				
			
		} catch (Exception e) {
			addActionError("Usuario o clave Inavalida");
			logger.error("Ha ocurrido un error con el siguiente mensaje: " +  e.getMessage());
		}
		
		return result;
	}
	
	public String logout() {

		@SuppressWarnings("unchecked")
		Set<String> clavesSesion = session.keySet();
		for (String clave :  clavesSesion) {
			session.remove(clave);
		}
		setSession(null);
		usuario = null;
		cedula = 0;
		clave = null;
		System.gc();
		return SUCCESS;
	}
	
	

	public int getCedula() {
		return cedula;
	}

	public void setCedula(int cedula) {
		this.cedula = cedula;
	}

	public String getClave() {
		return clave;
	}

	public void setClave(String clave) {
		this.clave = clave;
	}

	public String getMensaje() {
		return mensaje;
	}
	
	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public UsuarioTo getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioTo usuario) {
		this.usuario = usuario;
	}

	public Map getSession() {
		return session;
	}

	public void setSession(Map session) {
		this.session = session;
	}

	public String getNombres() {
		return nombres;
	}

	public void setNombres(String nombres) {
		this.nombres = nombres;
	}

	public String getApellidos() {
		return apellidos;
	}

	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}
}
